/**
 * OSS Upload SDK 使用示例 (TypeScript版本)
 * 该文件演示了如何使用SDK进行文件上传等操作
 */

// 引入SDK
import { OssUploadClient, StsCredentialsResponse } from './src/ossUpload';

// 模拟获取STS凭证的函数
async function mockGetCredentials(): Promise<StsCredentialsResponse> {
  // 在实际使用中，这里应该是一个真实的API调用
  // 例如: const response = await fetch('/api/get-sts-token');
  //       return await response.json();
  
  // 模拟返回STS凭证
  return {
    accessKeyId: 'STS.NTx31RT****',
    accessKeySecret: '86cKMV5pHXj4D****',
    securityToken: 'CAIS+wF1q6Ft5B2yfSjIr5bkKpFl****',
    regionId: 'cn-hangzhou',
    bucketName: 'my-bucket',
    baseDir: 'uploads'
  };
}

// 模拟文件对象（在浏览器环境中通常是File对象）
class MockFile {
  name: string;
  size: number;
  type: string;
  
  constructor(name: string, size: number, type: string) {
    this.name = name;
    this.size = size;
    this.type = type;
  }
  
  // 模拟slice方法
  slice(start: number, end: number): Blob {
    return new Blob([], { type: this.type });
  }
}

// 模拟Blob对象
class MockBlob {
  content: any[];
  type: string;
  
  constructor(content: any[], options: { type?: string } = {}) {
    this.content = content;
    this.type = options.type || '';
  }
}

// 演示如何使用SDK
async function demo(): Promise<void> {
  console.log('开始演示OSS Upload SDK的使用...\n');
  
  try {
    // 方式1: 使用静态方法创建客户端
    console.log('1. 使用createWithCredentials静态方法创建客户端...');
    const client1 = await OssUploadClient.createWithCredentials(mockGetCredentials);
    console.log('✅ 客户端创建成功\n');
    
    // 方式2: 先创建客户端，然后更新凭证
    console.log('2. 先创建基础客户端，然后更新凭证...');
    const basicOptions = {
      accessKeyId: 'placeholder',
      accessKeySecret: 'placeholder',
      bucket: 'placeholder',
      region: 'oss-cn-hangzhou'
    };
    
    const client2 = new OssUploadClient(basicOptions);
    await client2.updateCredentials(mockGetCredentials);
    console.log('✅ 凭证更新成功\n');
    
    // 演示其他功能（注意：由于这是演示，实际的上传操作不会真正连接到OSS）
    console.log('3. 演示其他功能方法...');
    console.log('- 获取文件MIME类型:', client1.getFileMimeType('image.png'));
    console.log('- 获取文件MIME类型:', client1.getFileMimeType('document.pdf'));
    console.log('✅ 其他功能方法演示完成\n');
    
    console.log('🎉 所有演示完成！SDK基本功能验证通过。');
    console.log('\n注意事项:');
    console.log('- 实际使用中需要用真实的STS凭证获取函数替换mockGetCredentials');
    console.log('- 在浏览器环境中，文件上传需要真实的File对象');
    console.log('- 确保OSS Bucket已正确配置CORS规则');
    
  } catch (error: any) {
    console.error('❌ 演示过程中发生错误:', error.message);
  }
}

// 运行演示
demo();

export {
  mockGetCredentials,
  MockFile,
  MockBlob
};